package com.sxj.corejava.code08_常用类.String类;

import java.util.Arrays;
import java.util.Scanner;

/**
 * @author 石小俊
 * @date 2025年01月11日
 */
public class Test10_练习 {

    private static Scanner sc = new Scanner(System.in);

    public static void main(String[] args) {
        test04();
    }

    /**
     * 控制台输入一个字符串,统计字符串包含多少个数字、英文字母以及其他字符
     */
    public static void test01() {
        System.out.print("请输入一个字符串:");
        String s = sc.nextLine();

        // 由于英文字母分大小写,统计时不需要区分
        // 为了便于统计,可以将字符串中所有英文字母统一改为大写或者小写
        s = s.toUpperCase();
        // 准备3个变量,分别接收数字、字母、其他字符的数量
        int count1 = 0, count2 = 0, count3 = 0;
        // 遍历字符串中所有字符
        for (int i = 0; i < s.length(); i++) {
            // 取出当前迭代的字符
            char c = s.charAt(i);
            // 判断当前字符是否是数字
            if (c >= '0' && c <= '9') {
                count1++;
            } else if (c >= 'A' && c <= 'Z') {
                count2++;
            } else {
                count3++;
            }
        }
        System.out.println("字符串中包含" + count1 + "个数字," + count2 + "个英文字母," + count3 + "个其他字符");
    }

    /**
     * 控制台输入一个字符串,统计每个字母出现的次数(忽略大小写)并输出
     */
    public static void test02() {
        System.out.print("请输入一个字符串:");
        String s = sc.nextLine();

        // 由于英文字母分大小写,统计时不需要区分
        // 为了便于统计,可以将字符串中所有英文字母统一改为大写或者小写
        s = s.toLowerCase();
        char[] cs = s.toCharArray();
        // 外层循环控制每一个字母
        for (char i = 'a'; i <= 'z'; i++) {
            // 定义一个变量,用于接收当前遍历的字符出现的次数
            int count = 0;
            // 内层循环遍历字符串中所有字符
            for (char c : cs) {
                if (c == i) {
                    count++;
                }
            }
            // 如果某个字母没有出现过,则不需要统计
            if (count != 0) {
                System.out.println("字母" + i + "出现的次数为:" + count + "次");
            }
        }
    }

    /**
     * 控制台输入一个字符串,对字符串中字符进行自然顺序的排序,将排序后的字符串展示出来
     */
    public static void test03() {
        System.out.print("请输入一个字符串:");
        String s = sc.nextLine();
        // 将字符串转换成字符数组
        char[] cs = s.toCharArray();
        // 使用数组工具类对字符数组进行排序
        Arrays.sort(cs);
        // 将排序后的字符数组转换成字符串
        String result = new String(cs);
        System.out.println(result);
    }

    /**
     * 控制台输入两个字符串,计算第二个字符串在第一个字符串中出现的次数
     */
    public static void test04() {
        System.out.print("请输入第一个字符串:");
        String s = sc.next();
        System.out.print("请输入第二个字符串:");
        String s2 = sc.next();
        if (s.length() >= s2.length()) {
            // 准备一个变量,用于接收出现的次数
            int count = 0;
            // 查询第二个字符串在第一个字符串中第一次出现的索引号
            int index = 0;
            while ((index = s.indexOf(s2)) != -1) {
                // 进入循环,说明出现了
                count++;
                // 此时找到的部分已经不需要了,可以通过截取字符串的方式将已找到的部分截取掉
                // 截取的长度为:当前找到的索引号+第二个字符串的长度
                s = s.substring(index + s2.length());
            }
            System.out.println("第二个字符串在第一个字符串中出现了" + count + "次");
        } else {
            System.out.println("第二个字符串没有在第一个字符串中出现");
        }
    }

}
